<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>Pyraminx scrambler (Uniform Random-State)</title>

<script language="JavaScript1.1" type="text/javascript">
<!--
/* Base script written by Jaap Scherphuis, jaapsch a t yahoo d o t com */
/* Javascript written by Syoji Takamatsu, , red_dragon a t honki d o t net */
/* Random-State modification by Lucas Garron (lucasg a t gmx d o t de / garron.us) in collaboration with Michael Gottlieb (mzrg.com)*/
/* Version 1.0*/
/* Hacked by Roger Lew for Android Cube Timer,  http://code.google.com/p/android-cubetimer/ */
 
var seqlen = 20;
var numcub = 5;

var colorString = "gryb";  //In dlburf order. May use any colours in colorList below

// list of available colours
var colorList = new Array(
	'g', "green",  "green",
	'r', "red",    "red",
	'y', "yellow", "yellow",
	'b', "blue",   "blue",
	'w', "white",  "white",
	'o', "#ff8000","orange",   // 'orange' is not an official html colour name
	'p', "purple", "purple",
	'0', "gray",   "grey"      // used for unrecognised letters, or when zero used.
);
// layout
var layout = new Array(
	1,2,1,2,1,0,2,0,1,2,1,2,1,
	0,1,2,1,0,2,1,2,0,1,2,1,0,
	0,0,1,0,2,1,2,1,2,0,1,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,1,2,1,2,1,0,0,0,0,
	0,0,0,0,0,1,2,1,0,0,0,0,0,
	0,0,0,0,0,0,1,0,0,0,0,0,0
);

var seq   = new Array();	// move sequences
var colmap = new Array();	// color map
var colors = new Array(); //stores colours used

function parse() {
	var s = "";
	var urlquery = location.href.split("?")
	if(urlquery.length > 1) {
		var urlterms = urlquery[1].split("&")
		for( var i = 0; i < urlterms.length; i++) {
			var urllr = urlterms[i].split("=");
			if(urllr[0] == "len") {
				if(urllr[1]-0 >= 1 ) 
					seqlen = urllr[1] - 0;
			} 
			else if(urllr[0] == "num") {
				if(urllr[1] - 0 >= 1 ) 
					numcub = urllr[1] - 0;
			} 
			else if(urllr[0] == "col") {
				if(urllr[1].length==4) 
					colorString = urllr[1];
			}
		}
	}
	// expand colour string into 6 actual html color names
	for(var k = 0; k < 6; k++){
		colors[k+1] = colorList.length - 3;	// gray
		for( var i = 0; i < colorList.length; i += 3) {
			if( colorString.charAt(k) == colorList[i]) {
				colors[k+1] = i;	// not use index 0
				break;
			}
		}
	}
}

function scramble()
{
	var i, j, n, ls, t;

	for( n = 0; n < numcub; n++){
		seq[n] = new Array();
		colmap[n] = new Array(
				1,1,1,1,1,0,2,0,3,3,3,3,3,
				0,1,1,1,0,2,2,2,0,3,3,3,0,
				0,0,1,0,2,2,2,2,2,0,3,0,0,
				0,0,0,0,0,0,0,0,0,0,0,0,0,
				0,0,0,0,4,4,4,4,4,0,0,0,0,
				0,0,0,0,0,4,4,4,0,0,0,0,0,
				0,0,0,0,0,0,4,0,0,0,0,0,0
		);
		i = 0;

		var f2e=[[],[3,2,1,2,3,1,1,2,0,1,1,2,0,2],[3,2,1,2,0,2,1,1,0,2,3,1,0,2],[0,1,2,2,0,2,2,1,0,2,1,1,0,1,1,2],[1,1,0,2,3,2,0,1,3,1,1,2],[1,2,3,1,1,1,3,2],[0,2,3,2,1,1,0,2,3,1,0,2,1,2],[0,1,3,2,2,2,0,2,3,2,2,1,3,2],[1,1,0,1,1,2,0,2],[1,2,3,2,1,1,3,1],[0,2,3,2,1,1,0,2,3,1,1,2,0,2],[1,2,3,2,0,2,1,1,0,2,3,1,0,2],[3,1,1,2,3,2,1,1],[3,1,1,1,0,1,1,2,0,2,3,2],[0,1,3,2,0,1,1,2,3,1,0,1,1,1],[1,2,0,2,3,2,1,1,0,2,3,1,0,2],[0,1,1,1,0,2,1,2],[1,1,0,2,3,1,0,1,3,2,1,2],[3,2,0,2,1,1,0,2,3,1,0,2,1,2],[3,1,2,2,0,1,3,2,2,1,0,2],[0,1,3,1,0,1,1,1,3,2,0,1,1,2],[0,2,1,1,3,1,0,1,3,2,1,2],[3,1,1,1,0,2,3,2,1,2,0,1],[3,2,0,1,1,2,3,2,1,1,3,2,0,2],[0,2,1,1,3,2,0,1,3,1,1,2],[3,1,1,2,0,2,1,2,0,1,3,2,1,2],[2,2,1,1,0,2,2,1,0,1,1,2],[0,1,1,2,3,1,1,1,0,2,3,2],[0,2,1,1,0,2,1,2,0,2],[3,2,1,2,0,2,1,2,0,1,3,1,1,2],[0,1,1,1,3,2,1,1,3,1,1,1,0,2],[1,2,0,1,3,1,0,2,3,2,1,1],[1,2,0,2,1,2,0,1,1,2],[0,2,3,1,1,1,0,1,3,2,1,2],[0,1,3,2,1,2,3,1,1,1,0,2],[0,1,1,2,3,1,0,2,3,2,1,1],[0,2,1,1,0,1,1,2],[1,1,0,2,3,1,0,2,3,2,0,2,1,2],[0,1,3,2,1,2,3,1,1,2,0,2,1,2],[0,1,1,2,3,1,0,1,3,2,0,1,1,1],[0,1,1,1,3,2,0,1,3,1,0,1,1,2],[0,1,1,2,3,2,1,1,0,2,3,1],[1,1,3,1,0,2,1,2,0,1,3,2],[2,1,1,1,0,2,2,2,0,1,1,2],[0,1,3,2,0,2,3,1],[0,1,2,2,0,1,1,1,2,1,0,1,1,2],[3,2,0,1,1,1,3,1,1,2,0,2],[0,2,1,2,3,1,1,2,0,1,3,2,1,2],[1,1,0,1,3,2,1,2,0,2,3,1],[0,1,3,2,1,1,0,1,3,1,0,1,1,2],[1,2,3,1,0,2,1,2,3,2,0,1,1,2],[1,2,3,2,0,1,1,1,3,1,0,2],[0,1,3,2,0,2,1,2,3,1,1,1],[3,1,1,1,0,1,3,1,1,2,3,1,0,2],[3,1,0,2,1,2,0,1,3,2,1,1],[1,1,3,1,1,1,0,2,3,2,1,1,0,1],[0,1,1,1,3,2,0,2,3,1,1,2],[3,1,1,1,3,1,0,1,1,2,3,1,0,2],[3,2,0,1,1,1,3,1,0,2,1,2],[3,1,0,2,1,2,3,2,0,1,1,1],[0,1,1,1,0,1,1,2,0,1],[3,1,0,1,1,2,3,2,1,1,0,2],[1,1,3,2,0,2,1,2,3,1,0,1],[1,2,0,1,3,2,1,1,3,1,0,2],[3,1,0,1,3,2,0,2],[1,2,3,1,1,2,0,1,3,2,1,2,0,2],[0,1,3,2,1,1,3,1,1,2,0,2],[0,1,1,1,3,1,0,2,1,1,3,2,1,1],[1,1,3,2,0,1,3,1,1,2,0,2],[1,2,3,1,0,1,1,1,3,2,0,2],[0,2,3,2,0,2,1,1,3,1,0,2,1,2],[1,1,0,1,1,1,3,1,1,1,0,2,3,2],[1,2,3,1,0,1,3,2,1,2,0,2,1,2],[3,1,1,1,0,1,3,2,1,2,0,2],[3,2,0,2,1,2,3,1,0,1,1,1],[1,2,0,2,3,2,0,2,1,1,3,1,0,2],[3,1,0,1,1,1,3,2,0,2,1,2],[1,1,3,1,0,1,3,2,1,2,0,2],[0,1,3,2,1,1,3,1,0,2,1,2],[1,2,3,2,0,2,1,2,3,1,0,1,1,2],[1,1,0,2,1,1,0,1,1,1],[1,2,0,2,3,1,0,2,3,2,1,1,0,2],[0,1,3,1,1,1,0,1,3,2,0,1,1,2],[0,1,1,2,3,2,1,1,3,1,0,2],[0,2,1,2,0,1,1,1],[3,2,0,2,1,2,3,1,1,2,0,1,1,2],[0,1,3,1,0,2,3,2],[0,1,3,1,1,1,0,2,1,1,3,2,1,1],[0,1,3,2,1,1,0,1,3,1,1,2,0,1],[0,2,1,2,3,1,0,1,1,1,3,2],[1,1,3,2,0,1,1,2,3,1,0,2],[0,1,3,2,1,2,3,2,1,1,0,2,3,2],[0,2,1,2,0,1,1,2,0,1,1,2,0,2],[0,2,1,2,3,1,0,1,3,2,1,1],[1,1,0,1,3,2,1,2,3,1,0,2],[1,2,3,2,1,1,0,1,3,1,0,2],[0,2,1,2,0,2,1,2,0,2,1,2],[0,2,1,2,3,2,0,1,1,1,3,1],[0,1,3,1,1,1,0,2,3,2,1,2],[1,2,0,2,3,2,1,2,3,1,0,1,1,2],[1,1,0,2,1,2,0,1],[0,2,1,1,3,1,0,2,3,2,0,2,1,2],[1,1,0,1,3,1,0,1,3,2,0,1,1,2],[0,2,1,2,3,2,1,2,3,1,0,1,1,2],[1,2,0,2,1,1,0,1],[3,1,1,1,0,2,1,1,3,2,1,1,0,1],[3,2,1,1,0,1,3,1,0,2,1,2],[2,1,1,2,3,1,2,2,1,1,3,2],[3,1,1,2,0,2,3,2,1,1,0,1],[1,2,3,1,0,2,1,1,0,1,3,2],[3,2,1,1,0,1,3,1,1,2,0,2],[0,2,3,2,1,2,3,2,0,1,1,1,3,2],[1,1,0,1,1,1,0,1,1,1,0,1],[1,2,3,2,0,2,1,1,3,1,0,1],[1,1,0,1,3,1,1,2,0,2,3,2],[3,2,1,2,0,1,1,2,3,1,0,2,1,2],[3,1,1,2,3,2,0,2,1,1,0,1],[1,2,3,1,0,2,3,2,1,1,0,1],[0,2,3,2,1,2,3,1,0,1,1,1],[3,2,1,1,3,2,0,1,3,2,1,2,0,2]];
		var l4e=[[],[1,1,3,2,1,2,3,2,1,1,3,2,1,2],[1,1,3,1,1,2,3,1,1,1,3,1,1,2],[3,1,0,1,3,2,1,1,3,2,1,2,3,1,0,2],[1,2,3,1,0,2,3,1,0,1,3,2,1,1,3,2],[0,1,3,2,1,1,3,2,1,2,3,1,0,2,3,1],[0,1,3,1,1,1,3,2,1,2,0,2],[1,2,0,2,3,2,0,1,3,1,1,1],[2,2,1,2,3,2,1,1,3,1,2,1],[0,1,1,1,3,1,1,2,3,2,0,2],[1,2,3,2,0,2,3,1,0,1,1,1],[2,2,3,2,1,2,3,1,1,1,2,1],[1,1,0,2,3,1,0,1,3,2,0,1,1,2,0,2],[3,2,1,1,3,2,1,2,3,1,0,2,3,1,0,1],[0,2,1,1,3,2,1,2,3,1,1,2,0,1,1,1],[3,1,0,2,3,1,0,1,1,1,3,2,2,1,3,2,2,2,1,2],[3,2,0,2,2,2,3,1,2,2,0,2,2,2,0,2],[3,1,0,1,2,1,0,1,2,1,3,2,2,1,0,1],[1,1,3,2,1,2,0,2,3,2,0,1,3,2],[3,2,1,1,3,2,1,2,0,2,3,2,0,1],[3,1,1,1,3,2,1,2,0,2,3,2,0,1,3,1],[3,2,0,2,3,1,0,1,1,1,3,1,1,2,3,2],[3,1,0,2,3,1,0,1,1,1,3,1,1,2],[0,2,3,1,0,1,1,1,3,1,1,2,3,1],[3,2,0,2,2,2,3,1,2,1,0,1],[0,1,1,2,2,1,0,1,2,2,0,1,1,1],[3,1,1,2,0,1,1,1,0,1,3,2,0,1],[3,1,0,1,1,1,0,1,3,2,0,2,1,2,0,2],[3,1,0,2,3,2,0,1],[1,1,3,1,1,2,3,1,0,2,3,1,0,1],[0,1,1,2,0,2,1,1],[3,1,0,2,2,2,3,2,2,1,3,2,0,1,3,1],[3,2,0,2,3,1,0,1],[0,2,2,1,0,2,2,2,0,2],[3,1,1,1,3,2,1,2,3,1,0,2,3,2,0,1],[3,1,0,2,3,1,2,2,3,1,2,1,0,1],[0,2,3,1,0,1,1,1,3,2,1,2],[3,2,1,1,3,1,2,2,1,1,2,1,1,1],[3,2,1,1,3,1,1,2,3,1,1,1,3,2,1,2],[0,1,1,1,0,1,3,1,0,2,1,2,0,2,3,2],[1,1,3,2,1,2,3,1],[3,1,0,2,3,1,0,1,3,2,1,1,3,1,1,2,3,1],[3,1,0,1,2,1,0,1,2,2,0,1,3,2],[3,1,1,1,3,2,2,1,3,2,2,2,1,2,3,1],[3,1,1,1,3,1,1,2,3,1],[3,2,1,2,0,1,1,1,0,2,3,1],[1,2,2,2,1,2,2,2,3,2,2,2,1,2,3,1],[3,1,1,1,2,1,3,1,2,2,3,1,1,2],[3,2,1,1,3,1,1,2],[1,2,0,1,1,1,0,2],[0,2,3,2,0,1,3,2,1,1,3,2,1,2],[3,2,1,1,2,1,3,1,2,2,3,1,1,2,3,2],[3,1,1,1,2,1,3,2,2,2,1,2],[3,2,0,1,1,2,0,2,1,2,3,1,1,2],[1,2,0,1,2,2,1,2,2,1,1,2,0,2],[3,2,1,2,0,2,1,2,3,1,1,1,0,1,1,1],[3,1,1,1,3,2,1,2],[3,2,0,2,3,1,0,1,3,2,1,1,3,1,1,2],[1,1,2,2,1,1,2,1,1,1],[3,2,1,1,3,2,2,1,3,2,2,2,1,2],[0,2,3,1,0,1,3,2],[3,2,1,2,2,2,1,2,2,1,1,2,3,1],[3,2,1,1,3,2,1,2,3,1,0,2,3,2,0,1,3,2],[3,2,0,2,3,1,2,2,3,1,2,1,0,1,3,2],[1,1,3,2,1,2,0,2,3,1,0,1],[3,1,0,2,3,2,0,1,3,2,0,2,3,1,0,1],[3,1,0,2,3,2,2,1,0,2,2,2,0,2],[1,2,0,2,1,2,3,2,1,1,0,1,1,1,3,1],[3,2,0,2,3,2,0,1,3,2],[0,1,2,1,0,1,2,1,3,1,2,1,0,1,3,2],[3,1,0,1,1,2,0,2,1,1,3,2],[3,2,0,2,2,2,3,2,2,1,3,2,0,1],[3,2,1,1,3,2,1,2,3,2],[0,1,2,1,0,1,2,2,0,1],[0,1,1,1,2,2,1,1,0,1,2,1,0,1,1,1],[1,1,3,2,2,1,3,2,2,2,1,2,3,2],[1,1,3,1,1,2,3,2],[3,1,0,2,2,2,3,2,2,2,0,2,2,2,0,2],[3,1,1,2,0,1,1,1,0,2,3,2],[1,1,2,1,3,1,2,2,3,1,1,2,3,1],[3,1,1,1,3,2,1,1,0,1,1,1,0,2],[3,2,0,1,1,1,0,1,3,1,0,2,1,2,0,2],[3,2,0,2,2,2,3,2,2,1,0,1,3,2],[3,1,1,1,3,2,1,2,3,2,1,1,3,1,1,2],[0,2,3,2,0,1,3,1],[3,2,0,1,1,2,0,2,1,1,3,1],[3,2,1,1,2,1,3,1,2,1,1,1,2,1,1,1],[0,2,2,2,3,2,2,1,3,2,0,1,3,2],[3,1,0,2,3,1,0,1,3,1],[1,2,0,2,2,1,0,2,1,2,2,2,1,2,0,2],[1,2,2,2,1,2,2,1,1,2],[0,2,3,1,2,2,3,1,2,1,0,1,3,1],[3,2,0,2,3,1,0,2,1,2,0,2,1,1],[3,1,1,1,2,1,3,1,2,2,1,2,3,1],[3,1,1,2,0,2,1,2,3,2,1,1,0,1,1,1],[3,2,0,2,3,1,0,1,3,1,0,2,3,2,0,1]];


		var AUFs=[3,1,0,2,7,5,4,6];
		seq[n]=f2e[Math.floor(Math.random()*120)].concat(l4e[Math.floor(Math.random()*96)]);
		for(var i=0;i<8;i++){
			var dir=Math.floor(Math.random()*3);
			if(dir>0)
			seq[n]=seq[n].concat([AUFs[i],dir]);
		}
	}
}

function scramble_color()
{
	for( var n = 0; n < numcub; n++){
		for(var i = 0; i < seq[n].length; i += 2) {
			switch(seq[n][i]) {
				case 0:	// L
					rotate3(n, 14,58,18, seq[n][i + 1]);
					rotate3(n, 15,57,31, seq[n][i + 1]);
					rotate3(n, 16,70,32, seq[n][i + 1]);
					rotate3(n, 30,28,56, seq[n][i + 1]);
					break;
				case 1:	// R
					rotate3(n, 32,72,22, seq[n][i + 1]);
					rotate3(n, 33,59,23, seq[n][i + 1]);
					rotate3(n, 20,58,24, seq[n][i + 1]);
					rotate3(n, 34,60,36, seq[n][i + 1]);
					break;
				case 2:	// B
					rotate3(n, 14,10,72, seq[n][i + 1]);
					rotate3(n,  1,11,71, seq[n][i + 1]);
					rotate3(n,  2,24,70, seq[n][i + 1]);
					rotate3(n,  0,12,84, seq[n][i + 1]);
					break;
				case 3:	// U
					rotate3(n,  2,18,22, seq[n][i + 1]);
					rotate3(n,  3,19, 9, seq[n][i + 1]);
					rotate3(n, 16,20,10, seq[n][i + 1]);
					rotate3(n,  4, 6, 8, seq[n][i + 1]);
					break;
				case 4:	// l
					rotate3(n, 30,28,56, seq[n][i + 1]);
					break;
				case 5:	// r
					rotate3(n, 34,60,36, seq[n][i + 1]);
					break;
				case 6:	// b
					rotate3(n,  0,12,84, seq[n][i + 1]);
					break;
				case 7:	// u
					rotate3(n,  4, 6, 8, seq[n][i + 1]);
					break;
			}
		}
	}
}

function rotate3(n, v1, v2, v3, clockwise)
{
	var tmp;

	if(clockwise == 2) { //	un
		tmp = colmap[n][v3];
		colmap[n][v3] = colmap[n][v2];
		colmap[n][v2] = colmap[n][v1];
		colmap[n][v1] = tmp;
	}
	else {
		tmp = colmap[n][v1];
		colmap[n][v1] = colmap[n][v2];
		colmap[n][v2] = colmap[n][v3];
		colmap[n][v3] = tmp;
	}
}

function scramblestring(n)
{
	var s = "", i;
	for(i = 0; i < seq[n].length; i += 2) {
		s += "LRBUlrbu".charAt(seq[n][i]);
		if( seq[n][i + 1] == 2 )
			s += "'";
		s += " ";
	}
	do {} while (s != (s=s.replace(/(.) \1 /g,"$1' ").replace(/(.)' \1' /g,"$1 ").replace(/(.)' \1 /g,"").replace(/(.) \1' /g,"")));
	return s;
}

function draw_triangle(pat, color, val)
{
	var s = "";
	if(pat == 1) {
		s += "<table border=0 cellpadding=0 cellspacing=0>";
		s += "<tr><td colspan=12 width=12 height=2 bgcolor=" + colorList[colors[color] + 2] + ">" + val+  "</td></tr>";

		for(var i = 1; i <= 5; i++) {
			s += "<tr>";
			s += "<td colspan=" + i + " width=" + i + " height=2 bgcolor=silver></td>";
			s += "<td colspan=" + (12 - i * 2) + " width=" + (12 - i * 2) + " height=2 bgcolor=" + colorList[colors[color] + 2] + "></td>";
			s += "<td colspan=" + i + " width=" + i + " height=2 bgcolor=silver></td>";
			s += "</tr>";
		}

		s += "</table>";
	}
	else if(pat == 2) {
		s += "<table border=0 cellpadding=0 cellspacing=0>";
		for(var i = 5; i >= 1; i--) {
			s += "<tr>";
			s += "<td colspan=" + i + " width=" + i + " height=2 bgcolor=silver></td>";
			s += "<td colspan=" + (12 - i * 2) + " width=" + (12 - i * 2) + " height=2 bgcolor=" + colorList[colors[color] + 2] + "></td>";
			s += "<td colspan=" + i + " width=" + i + " height=2 bgcolor=silver></td>";
			s += "</tr>";
		}
		s += "<tr><td colspan=12 width=12 height=2 bgcolor=" + colorList[colors[color] + 2] + ">" + val+  "</td></tr>";
		s += "</table>";
	}
	else {
		s += "&nbsp;";
	}
	return s;
}

function imagetable(n)
{
	var x,y;
	var s = "<table border=0 cellpadding=0 cellspacing=0>";

	for(var y = 0; y < 7; y++) {
		s += "<tr>";
		for(var x = 0; x < 13; x++) {
			s += "<td>";
			s += draw_triangle(layout[y * 13 + x], colmap[n][y * 13 + x]                , "");
			s += "</td>";
		}
		s += "</tr>";
	}
	s += "</table>";
	return s;
}

parse();
scramble();


//-->
</script>

</head>

<body onLoad="window.HTMLOUT.setScramble(scramblestring(0))">

</body></html>
